



Remove elements from a List that satisfy given predicate in Java


Below are the methods to efficiently remove elements from a List satisfying a Predicate condition:


p  ==> Predicate, specifying the condition

l  ==> List, from which element to be removed




Using iterator
Below program demonstrates removal of null elements from list, using the Predicate 







 


 

 













// Java Program to remove nulls 
// from a List using iterator and Predicate 
import java.util.function.Predicate; 
import java.util.*; 
  
class GFG { 
  
    // Generic function to remove Null Using Iterator 
    public static <T> List<T> 
    removeNullUsingIterator(List<T> l, Predicate<T> p) 
    { 
  
        // Create an iterator from the l 
        Iterator<T> itr = l.iterator(); 
  
        // Find and remove all null 
        while (itr.hasNext()) { 
  
            // Fetching the next element 
            T t = itr.next(); 
  
            // Checking for Predicate condition 
            if (p.test(t)) { 
  
                // If the condition matches, 
                // remove that element 
                itr.remove(); 
            } 
        } 
  
        // Return the null 
        return l; 
    } 
  
    public static void main(String[] args) 
    { 
  
        // Create the l with null values 
        List<String> l = new ArrayList<>( 
               Arrays.asList("Geeks", 
                             null, 
                             "forGeeks", 
                             null, 
                             "A computer portal")); 
  
        // Print the list 
        System.out.println("List with null values: " + l); 
  
        // Creating a Predicate condition checking for null 
        Predicate<String> isNull = item -> Objects.nonNull(item); 
  
        // Removing nulls using iterator and Predicate 
        l = removeNullUsingIterator(l, isNull); 
  
        // Print the list 
        System.out.println("List with null values removed: " + l); 
    } 
} 


















Output:


List with null values: [Geeks, null, forGeeks, null, A computer portal]

List with null values removed: [Geeks, forGeeks, A computer portal]




Using List.removeAll()
In this method, a collection containing elements to be removed, is used to remove those elements from the original l. It requires creating a collection with the required elements using Predicate condition. After doing this, the original l is searched for this collection and all instances of it is removed.







 


 

 













// Java Program to remove 10 
// from a List using List.removeAll() and Predicate 
import java.util.function.Predicate; 
import java.util.*; 
  
class GFG { 
  
    // Generic function to remove elements using Predicate 
    public static <T> List<T> 
    removeElements(List<T> l, Predicate<T> p) 
    { 
  
        // Create collection using Predicate 
        Collection<T> collection = new ArrayList<>(); 
  
        for (T t : l) { 
            if (p.test(t)) { 
                collection.add(t); 
            } 
        } 
  
        // Print the list 
        System.out.println("Collection to be removed: " + collection); 
  
        // Removing 10 using List.removeAll() 
        // passing a collection 
        l.removeAll(collection); 
  
        // Return the list 
        return l; 
    } 
  
    public static void main(String[] args) 
    { 
  
        // Create a list with null values 
        List<String> l = new ArrayList<>( 
            Arrays.asList("1", "10", "15", "10", "12", "5", "10", "20")); 
  
        // Print the list  
        System.out.println("Original List: " + l); 
  
        // Creating a Predicate condition checking for 10 
        Predicate<String> is10 = i -> (i == "10"); 
  
        // Removing using Predicate 
        l = removeElements(l, is10); 
  
        // Print the list 
        System.out.println("Updated List: " + l); 
    } 
} 


















Output:


Original List: [1, 10, 15, 10, 12, 5, 10, 20]

Collection to be removed: [10, 10, 10]

Updated List: [1, 15, 12, 5, 20]




Using Lambdas (Java 8)
Stream.filter() method can be used in Java 8 that returns a stream consisting of the elements
that match the given predicate condition.







 


 

 













// Java Program to remove nulls 
// from a List using Java 8 
import java.util.function.Predicate; 
import java.util.stream.Collectors; 
import java.util.*; 
  
class GFG { 
  
    // Generic function to remove elements using Predicate 
    public static <T> List<T> 
    removeElements(List<T> l, Predicate<T> p) 
    { 
  
        // Removing nulls using Java Stream 
        // using Predicate condition in lambda expression 
        l = l.stream() 
                   .filter(p) 
                   .collect(Collectors.toList()); 
  
        // Return the list  
        return l; 
    } 
  
    public static void main(String[] args) 
    { 
  
        // Create a list with null values 
        List<String> l = new ArrayList<>( 
            Arrays.asList("Geeks", 
                          null, 
                          "forGeeks", 
                          null, 
                          "A computer portal")); 
  
        // Print the list  
        System.out.println("List with null values: " + l); 
  
        // Creating a Predicate condition checking for null 
        Predicate<String> isNull = i -> (i == null); 
  
        // Removing using Predicate 
        l = removeElements(l, isNull); 
  
        // Print the list  
        System.out.println("List with null values removed: " + l); 
    } 
} 


















Output:


List with null values: [Geeks, null, forGeeks, null, A computer portal]

List with null values removed: [Geeks, forGeeks, A computer portal]




Using removeIf()
 As the name suggests, it is a direct method to remove all elements that satisfy given predicate.







 


 

 













// Java Program to remove nulls 
// from a List using Java 8 
import java.util.function.Predicate; 
import java.util.*; 
  
class GFG { 
  
    // Generic function to remove elements using Predicate 
    public static <T> List<T> 
    removeElements(List<T> l, Predicate<T> p) 
    { 
  
        // Removing nulls using Java Stream 
        // using Predicate condition in removeIf() 
        l.removeIf(x -> p.test(x)); 
  
        // Return the list  
        return l; 
    } 
  
    public static void main(String[] args) 
    { 
  
        // Create a list with null values 
        List<String> l = new ArrayList<>( 
            Arrays.asList("Geeks", 
                          null, 
                          "forGeeks", 
                          null, 
                          "A computer portal")); 
  
        // Print the list 
        System.out.println("List with null values: " + l); 
  
        // Creating a Predicate condition checking for null 
        Predicate<String> isNull = i -> (i == null); 
  
        // Removing using Predicate 
        l = removeElements(l, isNull); 
  
        // Print the list 
        System.out.println("List with null values removed: " + l); 
    } 
} 


















Output:


List with null values: [Geeks, null, forGeeks, null, A computer portal]

List with null values removed: [Geeks, forGeeks, A computer portal]









RishabhPrabhuTechnical Content Engineer at GeeksForGeeksIf you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please Improve this article if you find anything incorrect by clicking on  the "Improve Article" button below.







 


 

 
Most popular in Java
 






 
More related articles in Java
 



 


 













